package test3.bit;

/**
 * 762. 二进制表示中质数个计算置位
 * 给定两个整数 L 和 R ，找到闭区间 [L, R] 范围内，计算置位位数为质数的整数个数。
 * <p>
 * （注意，计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有，1 不是质数。）
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/prime-number-of-set-bits-in-binary-representation
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class CountPrimeSetBits {
    public int countPrimeSetBits(int left, int right) {
        int res = 0;
        for (int i = left; i <= right; i++) {
            if (isPrime(Integer.bitCount(i)))
                res++;
        }
        return res;
    }

    private boolean isPrime(int bitCount) {
        if (bitCount == 2 || bitCount == 3 || bitCount == 5 || bitCount == 7 ||
                bitCount == 11 || bitCount == 13 || bitCount == 17 || bitCount == 19)
            return true;
        return false;
    }
}
